home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / doom / quake.zip / KASCAM17.ZIP / SOURCE / HKNIGHT.QC < prev    next >
Text File  |  1997-02-19  |  20KB  |  441 lines

  1. /*
  2. ==============================================================================
  3.  
  4. KNIGHT
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd id1/models/knight2
  10. $origin 0 0 24
  11. $base base
  12. $skin skin
  13.  
  14. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  15.  
  16. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9
  17. $frame walk10 walk11 walk12 walk13 walk14 walk15 walk16 walk17
  18. $frame walk18 walk19 walk20
  19.  
  20. $frame run1 run2 run3 run4 run5 run6 run7 run8
  21.  
  22. $frame pain1 pain2 pain3 pain4 pain5
  23.  
  24. $frame death1 death2 death3 death4 death5 death6 death7 death8
  25. $frame death9 death10 death11 death12
  26.  
  27. $frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  28. $frame deathb9
  29.  
  30. $frame char_a1 char_a2 char_a3 char_a4 char_a5 char_a6 char_a7 char_a8
  31. $frame char_a9 char_a10 char_a11 char_a12 char_a13 char_a14 char_a15 char_a16
  32.  
  33. $frame magica1 magica2 magica3 magica4 magica5 magica6 magica7 magica8
  34. $frame magica9 magica10 magica11 magica12 magica13 magica14
  35.  
  36. $frame magicb1 magicb2 magicb3 magicb4 magicb5 magicb6 magicb7 magicb8
  37. $frame magicb9 magicb10 magicb11 magicb12 magicb13
  38.  
  39. $frame char_b1 char_b2 char_b3 char_b4 char_b5 char_b6
  40.  
  41. $frame slice1 slice2 slice3 slice4 slice5 slice6 slice7 slice8 slice9 slice10
  42.  
  43. $frame smash1 smash2 smash3 smash4 smash5 smash6 smash7 smash8 smash9 smash10
  44. $frame smash11
  45.  
  46. $frame w_attack1 w_attack2 w_attack3 w_attack4 w_attack5 w_attack6 w_attack7
  47. $frame w_attack8 w_attack9 w_attack10 w_attack11 w_attack12 w_attack13 w_attack14
  48. $frame w_attack15 w_attack16 w_attack17 w_attack18 w_attack19 w_attack20
  49. $frame w_attack21 w_attack22
  50.  
  51. $frame magicc1 magicc2 magicc3 magicc4 magicc5 magicc6 magicc7 magicc8
  52. $frame magicc9 magicc10 magicc11
  53.  
  54.  
  55. void() hknight_char_a1;
  56. void() hknight_run1;
  57. void() hk_idle_sound;
  58.  
  59. void(float offset) hknight_shot =
  60. {
  61.     local   vector  offang;
  62.     local   vector  org, vec;
  63.  
  64.     offang = vectoangles (self.enemy.origin - self.origin);
  65.     offang_y = offang_y + offset * 6;
  66.  
  67.     makevectors (offang);
  68.  
  69.     org = self.origin + self.mins + self.size*0.5 + v_forward * 20;
  70.  
  71. // set missile speed
  72.     vec = normalize (v_forward);
  73.     vec_z = 0 - vec_z + (random() - 0.5)*0.1;
  74.  
  75.     launch_spike (org, vec);
  76.     newmis.classname = "knightspike";
  77.     setmodel (newmis, "progs/k_spike.mdl");
  78.     setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);
  79.     newmis.velocity = vec*300;
  80.     sound (self, CHAN_WEAPON, "hknight/attack1.wav", 1, ATTN_NORM);
  81. };
  82.  
  83. void() CheckForCharge =
  84. {
  85. // check for mad charge
  86. if (!enemy_vis)
  87.     return;
  88. if (time < self.attack_finished)
  89.     return;
  90. if ( fabs(self.origin_z - self.enemy.origin_z) > 20)
  91.     return;     // too much height change
  92. if ( vlen (self.origin - self.enemy.origin) < 80)
  93.     return;     // use regular attack
  94.  
  95. // charge
  96.     SUB_AttackFinished (2);
  97.     hknight_char_a1 ();
  98.  
  99. };
  100.  
  101. void() CheckContinueCharge =
  102. {
  103.     if (time > self.attack_finished)
  104.     {
  105.         SUB_AttackFinished (3);
  106.         hknight_run1 ();
  107.         return;     // done charging
  108.     }
  109.     if (random() > 0.5)
  110.         sound (self, CHAN_WEAPON, "knight/sword2.wav", 1, ATTN_NORM);
  111.     else
  112.         sound (self, CHAN_WEAPON, "knight/sword1.wav", 1, ATTN_NORM);
  113. };
  114.  
  115. //===========================================================================
  116.  
  117. void()  hknight_stand1  =[  $stand1,    hknight_stand2  ] {ai_stand();};
  118. void()  hknight_stand2  =[  $stand2,    hknight_stand3  ] {ai_stand();};
  119. void()  hknight_stand3  =[  $stand3,    hknight_stand4  ] {ai_stand();};
  120. void()  hknight_stand4  =[  $stand4,    hknight_stand5  ] {ai_stand();};
  121. void()  hknight_stand5  =[  $stand5,    hknight_stand6  ] {ai_stand();};
  122. void()  hknight_stand6  =[  $stand6,    hknight_stand7  ] {ai_stand();};
  123. void()  hknight_stand7  =[  $stand7,    hknight_stand8  ] {ai_stand();};
  124. void()  hknight_stand8  =[  $stand8,    hknight_stand9  ] {ai_stand();};
  125. void()  hknight_stand9  =[  $stand9,    hknight_stand1  ] {ai_stand();};
  126.  
  127. //===========================================================================
  128.  
  129. void()  hknight_walk1   =[  $walk1,     hknight_walk2   ] {
  130. hk_idle_sound();
  131. ai_walk(2);};
  132. void()  hknight_walk2   =[  $walk2,     hknight_walk3   ] {ai_walk(5);};
  133. void()  hknight_walk3   =[  $walk3,     hknight_walk4   ] {ai_walk(5);};
  134. void()  hknight_walk4   =[  $walk4,     hknight_walk5   ] {ai_walk(4);};
  135. void()  hknight_walk5   =[  $walk5,     hknight_walk6   ] {ai_walk(4);};
  136. void()  hknight_walk6   =[  $walk6,     hknight_walk7   ] {ai_walk(2);};
  137. void()  hknight_walk7   =[  $walk7,     hknight_walk8   ] {ai_walk(2);};
  138. void()  hknight_walk8   =[  $walk8,     hknight_walk9   ] {ai_walk(3);};
  139. void()  hknight_walk9   =[  $walk9,     hknight_walk10  ] {ai_walk(3);};
  140. void()  hknight_walk10  =[  $walk10,    hknight_walk11  ] {ai_walk(4);};
  141. void()  hknight_walk11  =[  $walk11,    hknight_walk12  ] {ai_walk(3);};
  142. void()  hknight_walk12  =[  $walk12,    hknight_walk13  ] {ai_walk(4);};
  143. void()  hknight_walk13  =[  $walk13,    hknight_walk14  ] {ai_walk(6);};
  144. void()  hknight_walk14  =[  $walk14,    hknight_walk15  ] {ai_walk(2);};
  145. void()  hknight_walk15  =[  $walk15,    hknight_walk16  ] {ai_walk(2);};
  146. void()  hknight_walk16  =[  $walk16,    hknight_walk17  ] {ai_walk(4);};
  147. void()  hknight_walk17  =[  $walk17,    hknight_walk18  ] {ai_walk(3);};
  148. void()  hknight_walk18  =[  $walk18,    hknight_walk19  ] {ai_walk(3);};
  149. void()  hknight_walk19  =[  $walk19,    hknight_walk20  ] {ai_walk(3);};
  150. void()  hknight_walk20  =[  $walk20,    hknight_walk1   ] {ai_walk(2);};
  151.  
  152. //===========================================================================
  153.  
  154. void()  hknight_run1    =[  $run1,      hknight_run2    ] {
  155. hk_idle_sound();
  156. ai_run (20); CheckForCharge (); };
  157. void()  hknight_run2    =[  $run2,      hknight_run3    ] {ai_run(25);};
  158. void()  hknight_run3    =[  $run3,      hknight_run4    ] {ai_run(18);};
  159. void()  hknight_run4    =[  $run4,      hknight_run5    ] {ai_run(16);};
  160. void()  hknight_run5    =[  $run5,      hknight_run6    ] {ai_run(14);};
  161. void()  hknight_run6    =[  $run6,      hknight_run7    ] {ai_run(25);};
  162. void()  hknight_run7    =[  $run7,      hknight_run8    ] {ai_run(21);};
  163. void()  hknight_run8    =[  $run8,      hknight_run1    ] {ai_run(13);};
  164.  
  165. //============================================================================
  166.  
  167. void()  hknight_pain1   =[  $pain1,     hknight_pain2   ] {sound (self, CHAN_VOICE, "hknight/pain1.wav", 1, ATTN_NORM);};
  168. void()  hknight_pain2   =[  $pain2,     hknight_pain3   ] {};
  169. void()  hknight_pain3   =[  $pain3,     hknight_pain4   ] {};
  170. void()  hknight_pain4   =[  $pain4,     hknight_pain5   ] {};
  171. void()  hknight_pain5   =[  $pain5,     hknight_run1    ] {};
  172.  
  173. //============================================================================
  174.  
  175. void()  hknight_die1    =[  $death1,    hknight_die2    ] {ai_forward(10);};
  176. void()  hknight_die2    =[  $death2,    hknight_die3    ] {ai_forward(8);};
  177. void()  hknight_die3    =[  $death3,    hknight_die4    ]
  178. {self.solid = SOLID_NOT; ai_forward(7);};
  179. void()  hknight_die4    =[  $death4,    hknight_die5    ] {};
  180. void()  hknight_die5    =[  $death5,    hknight_die6    ] {};
  181. void()  hknight_die6    =[  $death6,    hknight_die7    ] {};
  182. void()  hknight_die7    =[  $death7,    hknight_die8    ] {};
  183. void()  hknight_die8    =[  $death8,    hknight_die9    ] {ai_forward(10);};
  184. void()  hknight_die9    =[  $death9,    hknight_die10   ] {ai_forward(11);};
  185. void()  hknight_die10   =[  $death10,   hknight_die11   ] {};
  186. void()  hknight_die11   =[  $death11,   hknight_die12   ] {};
  187. void()  hknight_die12   =[  $death12,   hknight_die12   ] {};
  188.  
  189. void()  hknight_dieb1   =[  $deathb1,   hknight_dieb2   ] {};
  190. void()  hknight_dieb2   =[  $deathb2,   hknight_dieb3   ] {};
  191. void()  hknight_dieb3   =[  $deathb3,   hknight_dieb4   ]
  192. {self.solid = SOLID_NOT;};
  193. void()  hknight_dieb4   =[  $deathb4,   hknight_dieb5   ] {};
  194. void()  hknight_dieb5   =[  $deathb5,   hknight_dieb6   ] {};
  195. void()  hknight_dieb6   =[  $deathb6,   hknight_dieb7   ] {};
  196. void()  hknight_dieb7   =[  $deathb7,   hknight_dieb8   ] {};
  197. void()  hknight_dieb8   =[  $deathb8,   hknight_dieb9   ] {};
  198. void()  hknight_dieb9   =[  $deathb9,   hknight_dieb9   ] {};
  199.  
  200. void() hknight_die =
  201. {
  202. // check for gib
  203.     if (self.health < -40)
  204.     {
  205.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  206.         ThrowHead ("progs/h_hellkn.mdl", self.health);
  207.         ThrowGib ("progs/gib1.mdl", self.health);
  208.         ThrowGib ("progs/gib2.mdl", self.health);
  209.         ThrowGib ("progs/gib3.mdl", self.health);
  210.         return;
  211.     }
  212.  
  213. // regular death
  214.     sound (self, CHAN_VOICE, "hknight/death1.wav", 1, ATTN_NORM);
  215.     if (random() > 0.5)
  216.         hknight_die1 ();
  217.     else
  218.         hknight_dieb1 ();
  219. };
  220.  
  221.  
  222. //============================================================================
  223.  
  224. void()  hknight_magica1 =[  $magica1,   hknight_magica2 ] {ai_face();};
  225. void()  hknight_magica2 =[  $magica2,   hknight_magica3 ] {ai_face();};
  226. void()  hknight_magica3 =[  $magica3,   hknight_magica4 ] {ai_face();};
  227. void()  hknight_magica4 =[  $magica4,   hknight_magica5 ] {ai_face();};
  228. void()  hknight_magica5 =[  $magica5,   hknight_magica6 ] {ai_face();};
  229. void()  hknight_magica6 =[  $magica6,   hknight_magica7 ] {ai_face();};
  230. void()  hknight_magica7 =[  $magica7,   hknight_magica8 ] {hknight_shot(-2);};
  231. void()  hknight_magica8 =[  $magica8,   hknight_magica9 ] {hknight_shot(-1);};
  232. void()  hknight_magica9 =[  $magica9,   hknight_magica10] {hknight_shot(0);};
  233. void()  hknight_magica10 =[ $magica10,  hknight_magica11] {hknight_shot(1);};
  234. void()  hknight_magica11 =[ $magica11,  hknight_magica12] {hknight_shot(2);};
  235. void()  hknight_magica12 =[ $magica12,  hknight_magica13] {hknight_shot(3);};
  236. void()  hknight_magica13 =[ $magica13,  hknight_magica14] {ai_face();};
  237. void()  hknight_magica14 =[ $magica14,  hknight_run1    ] {ai_face();};
  238.  
  239. //============================================================================
  240.  
  241. void()  hknight_magicb1 =[  $magicb1,   hknight_magicb2 ] {ai_face();};
  242. void()  hknight_magicb2 =[  $magicb2,   hknight_magicb3 ] {ai_face();};
  243. void()  hknight_magicb3 =[  $magicb3,   hknight_magicb4 ] {ai_face();};
  244. void()  hknight_magicb4 =[  $magicb4,   hknight_magicb5 ] {ai_face();};
  245. void()  hknight_magicb5 =[  $magicb5,   hknight_magicb6 ] {ai_face();};
  246. void()  hknight_magicb6 =[  $magicb6,   hknight_magicb7 ] {ai_face();};
  247. void()  hknight_magicb7 =[  $magicb7,   hknight_magicb8 ] {hknight_shot(-2);};
  248. void()  hknight_magicb8 =[  $magicb8,   hknight_magicb9 ] {hknight_shot(-1);};
  249. void()  hknight_magicb9 =[  $magicb9,   hknight_magicb10] {hknight_shot(0);};
  250. void()  hknight_magicb10 =[ $magicb10,  hknight_magicb11] {hknight_shot(1);};
  251. void()  hknight_magicb11 =[ $magicb11,  hknight_magicb12] {hknight_shot(2);};
  252. void()  hknight_magicb12 =[ $magicb12,  hknight_magicb13] {hknight_shot(3);};
  253. void()  hknight_magicb13 =[ $magicb13,  hknight_run1] {ai_face();};
  254.  
  255. //============================================================================
  256.  
  257. void()  hknight_magicc1 =[  $magicc1,   hknight_magicc2 ] {ai_face();};
  258. void()  hknight_magicc2 =[  $magicc2,   hknight_magicc3 ] {ai_face();};
  259. void()  hknight_magicc3 =[  $magicc3,   hknight_magicc4 ] {ai_face();};
  260. void()  hknight_magicc4 =[  $magicc4,   hknight_magicc5 ] {ai_face();};
  261. void()  hknight_magicc5 =[  $magicc5,   hknight_magicc6 ] {ai_face();};
  262. void()  hknight_magicc6 =[  $magicc6,   hknight_magicc7 ] {hknight_shot(-2);};
  263. void()  hknight_magicc7 =[  $magicc7,   hknight_magicc8 ] {hknight_shot(-1);};
  264. void()  hknight_magicc8 =[  $magicc8,   hknight_magicc9 ] {hknight_shot(0);};
  265. void()  hknight_magicc9 =[  $magicc9,   hknight_magicc10] {hknight_shot(1);};
  266. void()  hknight_magicc10 =[ $magicc10,  hknight_magicc11] {hknight_shot(2);};
  267. void()  hknight_magicc11 =[ $magicc11,  hknight_run1] {hknight_shot(3);};
  268.  
  269. //===========================================================================
  270.  
  271. void()  hknight_char_a1 =[  $char_a1,   hknight_char_a2 ] {ai_charge(20);};
  272. void()  hknight_char_a2 =[  $char_a2,   hknight_char_a3 ] {ai_charge(25);};
  273. void()  hknight_char_a3 =[  $char_a3,   hknight_char_a4 ] {ai_charge(18);};
  274. void()  hknight_char_a4 =[  $char_a4,   hknight_char_a5 ] {ai_charge(16);};
  275. void()  hknight_char_a5 =[  $char_a5,   hknight_char_a6 ] {ai_charge(14);};
  276. void()  hknight_char_a6 =[  $char_a6,   hknight_char_a7 ] {ai_charge(20); ai_melee();};
  277. void()  hknight_char_a7 =[  $char_a7,   hknight_char_a8 ] {ai_charge(21); ai_melee();};
  278. void()  hknight_char_a8 =[  $char_a8,   hknight_char_a9 ] {ai_charge(13); ai_melee();};
  279. void()  hknight_char_a9 =[  $char_a9,   hknight_char_a10    ] {ai_charge(20); ai_melee();};
  280. void()  hknight_char_a10=[  $char_a10,  hknight_char_a11    ] {ai_charge(20); ai_melee();};
  281. void()  hknight_char_a11=[  $char_a11,  hknight_char_a12    ] {ai_charge(18); ai_melee();};
  282. void()  hknight_char_a12=[  $char_a12,  hknight_char_a13    ] {ai_charge(16);};
  283. void()  hknight_char_a13=[  $char_a13,  hknight_char_a14    ] {ai_charge(14);};
  284. void()  hknight_char_a14=[  $char_a14,  hknight_char_a15    ] {ai_charge(25);};
  285. void()  hknight_char_a15=[  $char_a15,  hknight_char_a16    ] {ai_charge(21);};
  286. void()  hknight_char_a16=[  $char_a16,  hknight_run1    ] {ai_charge(13);};
  287.  
  288. //===========================================================================
  289.  
  290. void()  hknight_char_b1 =[  $char_b1,   hknight_char_b2 ]
  291. {CheckContinueCharge (); ai_charge(23); ai_melee();};
  292. void()  hknight_char_b2 =[  $char_b2,   hknight_char_b3 ] {ai_charge(17); ai_melee();};
  293. void()  hknight_char_b3 =[  $char_b3,   hknight_char_b4 ] {ai_charge(12); ai_melee();};
  294. void()  hknight_char_b4 =[  $char_b4,   hknight_char_b5 ] {ai_charge(22); ai_melee();};
  295. void()  hknight_char_b5 =[  $char_b5,   hknight_char_b6 ] {ai_charge(18); ai_melee();};
  296. void()  hknight_char_b6 =[  $char_b6,   hknight_char_b1 ] {ai_charge(8); ai_melee();};
  297.  
  298. //===========================================================================
  299.  
  300. void()  hknight_slice1  =[  $slice1,    hknight_slice2  ] {ai_charge(9);};
  301. void()  hknight_slice2  =[  $slice2,    hknight_slice3  ] {ai_charge(6);};
  302. void()  hknight_slice3  =[  $slice3,    hknight_slice4  ] {ai_charge(13);};
  303. void()  hknight_slice4  =[  $slice4,    hknight_slice5  ] {ai_charge(4);};
  304. void()  hknight_slice5  =[  $slice5,    hknight_slice6  ] {ai_charge(7); ai_melee();};
  305. void()  hknight_slice6  =[  $slice6,    hknight_slice7  ] {ai_charge(15); ai_melee();};
  306. void()  hknight_slice7  =[  $slice7,    hknight_slice8  ] {ai_charge(8); ai_melee();};
  307. void()  hknight_slice8  =[  $slice8,    hknight_slice9  ] {ai_charge(2); ai_melee();};
  308. void()  hknight_slice9  =[  $slice9,    hknight_slice10 ] {ai_melee();};
  309. void()  hknight_slice10 =[  $slice10,   hknight_run1    ] {ai_charge(3);};
  310.  
  311. //===========================================================================
  312.  
  313. void()  hknight_smash1  =[  $smash1,    hknight_smash2  ] {ai_charge(1);};
  314. void()  hknight_smash2  =[  $smash2,    hknight_smash3  ] {ai_charge(13);};
  315. void()  hknight_smash3  =[  $smash3,    hknight_smash4  ] {ai_charge(9);};
  316. void()  hknight_smash4  =[  $smash4,    hknight_smash5  ] {ai_charge(11);};
  317. void()  hknight_smash5  =[  $smash5,    hknight_smash6  ] {ai_charge(10); ai_melee();};
  318. void()  hknight_smash6  =[  $smash6,    hknight_smash7  ] {ai_charge(7); ai_melee();};
  319. void()  hknight_smash7  =[  $smash7,    hknight_smash8  ] {ai_charge(12); ai_melee();};
  320. void()  hknight_smash8  =[  $smash8,    hknight_smash9  ] {ai_charge(2); ai_melee();};
  321. void()  hknight_smash9  =[  $smash9,    hknight_smash10 ] {ai_charge(3); ai_melee();};
  322. void()  hknight_smash10 =[  $smash10,   hknight_smash11 ] {ai_charge(0);};
  323. void()  hknight_smash11 =[  $smash11,   hknight_run1    ] {ai_charge(0);};
  324.  
  325. //============================================================================
  326.  
  327. void()  hknight_watk1   =[  $w_attack1, hknight_watk2   ] {ai_charge(2);};
  328. void()  hknight_watk2   =[  $w_attack2, hknight_watk3   ] {ai_charge(0);};
  329. void()  hknight_watk3   =[  $w_attack3, hknight_watk4   ] {ai_charge(0);};
  330. void()  hknight_watk4   =[  $w_attack4, hknight_watk5   ] {ai_melee();};
  331. void()  hknight_watk5   =[  $w_attack5, hknight_watk6   ] {ai_melee();};
  332. void()  hknight_watk6   =[  $w_attack6, hknight_watk7   ] {ai_melee();};
  333. void()  hknight_watk7   =[  $w_attack7, hknight_watk8   ] {ai_charge(1);};
  334. void()  hknight_watk8   =[  $w_attack8, hknight_watk9   ] {ai_charge(4);};
  335. void()  hknight_watk9   =[  $w_attack9, hknight_watk10  ] {ai_charge(5);};
  336. void()  hknight_watk10  =[  $w_attack10,    hknight_watk11  ] {ai_charge(3); ai_melee();};
  337. void()  hknight_watk11  =[  $w_attack11,    hknight_watk12  ] {ai_charge(2); ai_melee();};
  338. void()  hknight_watk12  =[  $w_attack12,    hknight_watk13  ] {ai_charge(2); ai_melee();};
  339. void()  hknight_watk13  =[  $w_attack13,    hknight_watk14  ] {ai_charge(0);};
  340. void()  hknight_watk14  =[  $w_attack14,    hknight_watk15  ] {ai_charge(0);};
  341. void()  hknight_watk15  =[  $w_attack15,    hknight_watk16  ] {ai_charge(0);};
  342. void()  hknight_watk16  =[  $w_attack16,    hknight_watk17  ] {ai_charge(1);};
  343. void()  hknight_watk17  =[  $w_attack17,    hknight_watk18  ] {ai_charge(1); ai_melee();};
  344. void()  hknight_watk18  =[  $w_attack18,    hknight_watk19  ] {ai_charge(3); ai_melee();};
  345. void()  hknight_watk19  =[  $w_attack19,    hknight_watk20  ] {ai_charge(4); ai_melee();};
  346. void()  hknight_watk20  =[  $w_attack20,    hknight_watk21  ] {ai_charge(6);};
  347. void()  hknight_watk21  =[  $w_attack21,    hknight_watk22  ] {ai_charge(7);};
  348. void()  hknight_watk22  =[  $w_attack22,    hknight_run1    ] {ai_charge(3);};
  349.  
  350. //============================================================================
  351.  
  352. void() hk_idle_sound =
  353. {
  354.     if (random() < 0.2)
  355.         sound (self, CHAN_VOICE, "hknight/idle.wav", 1, ATTN_NORM);
  356. };
  357.  
  358. void(entity attacker, float damage) hknight_pain =
  359. {
  360.     if (self.pain_finished > time)
  361.         return;
  362.  
  363.     sound (self, CHAN_VOICE, "hknight/pain1.wav", 1, ATTN_NORM);
  364.  
  365.     if (time - self.pain_finished > 5)
  366.     {   // allways go into pain frame if it has been a while
  367.         hknight_pain1 ();
  368.         self.pain_finished = time + 1;
  369.         return;
  370.     }
  371.  
  372.     if ((random()*30 > damage) )
  373.         return;     // didn't flinch
  374.  
  375.     self.pain_finished = time + 1;
  376.     hknight_pain1 ();
  377. };
  378.  
  379. float   hknight_type;
  380.  
  381. void() hknight_melee =
  382. {
  383.     hknight_type = hknight_type + 1;
  384.  
  385.     sound (self, CHAN_WEAPON, "hknight/slash1.wav", 1, ATTN_NORM);
  386.     if (hknight_type == 1)
  387.         hknight_slice1 ();
  388.     else if (hknight_type == 2)
  389.         hknight_smash1 ();
  390.     else if (hknight_type == 3)
  391.     {
  392.         hknight_watk1 ();
  393.         hknight_type = 0;
  394.     }
  395. };
  396.  
  397. /*QUAKED monster_hell_knight (1 0 0) (-16 -16 -24) (16 16 40) Ambush
  398. */
  399. void() monster_hell_knight =
  400. {
  401.     if (deathmatch)
  402.     {
  403.         remove(self);
  404.         return;
  405.     }
  406.     precache_model2 ("progs/hknight.mdl");
  407.     precache_model2 ("progs/k_spike.mdl");
  408.     precache_model2 ("progs/h_hellkn.mdl");
  409.  
  410.  
  411.     precache_sound2 ("hknight/attack1.wav");
  412.     precache_sound2 ("hknight/death1.wav");
  413.     precache_sound2 ("hknight/pain1.wav");
  414.     precache_sound2 ("hknight/sight1.wav");
  415.     precache_sound ("hknight/hit.wav");     // used by C code, so don't sound2
  416.     precache_sound2 ("hknight/slash1.wav");
  417.     precache_sound2 ("hknight/idle.wav");
  418.     precache_sound2 ("hknight/grunt.wav");
  419.  
  420.     precache_sound ("knight/sword1.wav");
  421.     precache_sound ("knight/sword2.wav");
  422.  
  423.     self.solid = SOLID_SLIDEBOX;
  424.     self.movetype = MOVETYPE_STEP;
  425.  
  426.     setmodel (self, "progs/hknight.mdl");
  427.  
  428.     setsize (self, '-16 -16 -24', '16 16 40');
  429.     self.health = 250;
  430.  
  431.     self.th_stand = hknight_stand1;
  432.     self.th_walk = hknight_walk1;
  433.     self.th_run = hknight_run1;
  434.     self.th_melee = hknight_melee;
  435.     self.th_missile = hknight_magicc1;
  436.     self.th_pain = hknight_pain;
  437.     self.th_die = hknight_die;
  438.  
  439.     walkmonster_start ();
  440. };
  441.